/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ControladoresUI;

import AdmonHorarios.EnlaceHorario;
import AdmonHorarios.Hora;
import AdmonHorarios.Horario;
import AdmonHorarios.PeriodoHorario;
import ManagersUI.DisponibilidadCatedraticoManager;
import ManagersUI.TiposCursoRegistroManager;
import Modelos.CalendarioModel;
import Usuarios.conexion;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;

/**
 * FXML Controller class
 *
 * @author Chejo
 */
public class DisponibilidadCatedraticoController{
    
    //Horario:
    public AdmonHorarios.Horario calendario = new AdmonHorarios.Horario();
    //Conexion para la Base de Datos
    EntityManagerFactory emf = conexion.getInstancia().getEMF();
    EntityManager em = emf.createEntityManager();
    TableColumn clvHora,clvLunes,clvMartes,clvMiercoles,clvJueves,clvViernes,clvSabado;
    @FXML TableView tblDatos;
    ObservableList<CalendarioModel> listaDatos;
    DisponibilidadCatedraticoManager disponibilidadCatedraticoManager;
    int id; 
    ArrayList<Hora> periodos; 
    boolean aula;
    
    public void initialize() {}
  
    public void initManager(final DisponibilidadCatedraticoManager disponibilidadCatedraticoManager,int id, ArrayList<Hora> periodos, boolean aula) {
        this.disponibilidadCatedraticoManager = disponibilidadCatedraticoManager;
        this.id=id;
        this.periodos=periodos;
        this.aula=aula;
        
        if (aula){
            for (int i=0; i<periodos.size(); i++){
                EnlaceHorario enlace = new EnlaceHorario();
                for (int j=1; j<=6; j++){
                    String D="";
                    if (j==1){
                        D="Lunes";
                    }
                    if (j==2){
                        D="Martes";
                    }
                    if (j==3){
                        D="Miércoles";
                    }
                    if (j==4){
                        D="Jueves";
                    }
                    if (j==5){
                        D="Viernes";
                    }
                    if (j==6){
                        D="Sábado";
                    }
                    Query qr = em.createQuery("select ha from Horarioaula ha "
                        + "where ha.aulaidAula.idAula = " + id
                        + " and ha.dia = '" + D
                        + "' and ha.anulado = false");
                    List<Entidades.Horarioaula> HA = qr.getResultList();
                    qr = em.createQuery("select apa from Asignacionperiodoaula apa "
                        + "where apa.horarioAulaidHorarioAula.idHorarioAula "
                        + "= " + HA.get(0).getIdHorarioAula()
                        + " and apa.periodoidPeriodo.idPeriodo = " + periodos.get(i).getNumPeriodo());
                    List<Entidades.Asignacionperiodoaula> APA = qr.getResultList();
                    if(APA.size()>0){
                        PeriodoHorario periodo = new PeriodoHorario();
                        periodo.setDisponible(APA.get(0).getDisponible());
                        enlace.setPeriodo((j-1), periodo);
                    }else{
                        PeriodoHorario periodo = new PeriodoHorario();
                        periodo.setEstado("-");
                        enlace.setPeriodo((j-1), periodo);
                    }
                }
                calendario.setPeriodo(enlace);
            }
        }else{
            for (int i=0; i<periodos.size(); i++){
                EnlaceHorario enlace = new EnlaceHorario();
                for (int j=1; j<=6; j++){
                    String D="";
                    if (j==1){
                        D="Lunes";
                    }
                    if (j==2){
                        D="Martes";
                    }
                    if (j==3){
                        D="Miércoles";
                    }
                    if (j==4){
                        D="Jueves";
                    }
                    if (j==5){
                        D="Viernes";
                    }
                    if (j==6){
                        D="Sábado";
                    }
                    Query qr = em.createQuery("select hc from Horariocatedratico hc "
                        + "where hc.catedraticoidCatedratico.numeroCatedratico = " + id
                        + " and hc.dia = '" + D
                        + "' and hc.anulado = false");
                    List<Entidades.Horariocatedratico> HC = qr.getResultList();
                    qr = em.createQuery("select apc from Asignacionperiodocatedratico apc "
                        + "where apc.horarioCatedraticoidHorarioCatedratico.idHorarioCatedratico "
                        + "= " + HC.get(0).getIdHorarioCatedratico()
                        + " and apc.periodoidPeriodo.idPeriodo = " + periodos.get(i).getNumPeriodo());
                    List<Entidades.Asignacionperiodocatedratico> APC = qr.getResultList();
                    if(APC.size()>0){
                        PeriodoHorario periodo = new PeriodoHorario();
                        periodo.setDisponible(APC.get(0).getDisponible());
                        enlace.setPeriodo((j-1), periodo);
                    }else{
                        PeriodoHorario periodo = new PeriodoHorario();
                        periodo.setEstado("-");
                        enlace.setPeriodo((j-1), periodo);
                    }
                }
                calendario.setPeriodo(enlace);
            }
        }
        
        llenarCalendario(periodos);
    }
    
    public void llenarCalendario(ArrayList<Hora> periodos){
        //En este metodo se llena la tabla
        ObservableList<NHCalendario> data2 = FXCollections.observableArrayList();
        for (int fila=0; fila<periodos.size(); fila++){
            data2.add(new NHCalendario(calendario, fila, periodos));
        }
        System.out.println(data2.size());
        TableColumn periodoCol = new TableColumn("Periodo");
        periodoCol.setMinWidth(80);
        periodoCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("periodo"));
        
        TableColumn lunesCol = new TableColumn("Lunes");
        lunesCol.setMinWidth(100);
        lunesCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("lunes"));
        
        TableColumn martesCol = new TableColumn("Martes");
        martesCol.setMinWidth(100);
        martesCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("martes"));
        
        TableColumn miercolesCol = new TableColumn("Miércoles");
        miercolesCol.setMinWidth(100);
        miercolesCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("miercoles"));
        
        TableColumn juevesCol = new TableColumn("Jueves");
        juevesCol.setMinWidth(100);
        juevesCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("jueves"));
        
        TableColumn viernesCol = new TableColumn("Viernes");
        viernesCol.setMinWidth(100);
        viernesCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("viernes"));
        
        TableColumn sabadoCol = new TableColumn("Sábado");
        sabadoCol.setMinWidth(100);
        sabadoCol.setCellValueFactory(
                new PropertyValueFactory<NHCalendario, String>("sabado"));
        
        tblDatos.setItems(data2);
        tblDatos.getColumns().addAll(periodoCol,lunesCol,martesCol,miercolesCol,
                juevesCol,viernesCol,sabadoCol);
    }
}
